// RAP [rh] external editor not supported
///*******************************************************************************
// * Copyright (c) 2000, 2010 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.ui.internal.misc;
//
//import java.io.File;
//import java.io.IOException;
//import java.net.URL;
//
//import org.eclipse.core.runtime.CoreException;
//import org.eclipse.core.runtime.IConfigurationElement;
//import org.eclipse.core.runtime.IPath;
//import org.eclipse.core.runtime.IStatus;
//import org.eclipse.core.runtime.Platform;
//import org.eclipse.core.runtime.Status;
//import org.eclipse.jface.util.Util;
//import org.eclipse.osgi.util.NLS;
//import org.eclipse.swt.program.Program;
//import org.eclipse.ui.internal.WorkbenchMessages;
//import org.eclipse.ui.internal.WorkbenchPlugin;
//import org.eclipse.ui.internal.registry.EditorDescriptor;
//import org.osgi.framework.Bundle;
//
//public class ExternalEditor {
//    private IPath filePath;
//
//    private EditorDescriptor descriptor;
//
//    /**
//     * Create an external editor.
//     */
//    public ExternalEditor(IPath newFilePath, EditorDescriptor editorDescriptor) {
//        this.filePath = newFilePath;
//        this.descriptor = editorDescriptor;
//    }
//
//    /**
//     * open the editor. If the descriptor has a program then use it - otherwise build its
//     * info from the descriptor.
//     * @exception	Throws a CoreException if the external editor could not be opened.
//     */
//    public void open() throws CoreException {
//
//        Program program = this.descriptor.getProgram();
//        if (program == null) {
//            openWithUserDefinedProgram();
//        } else {
//            String path = ""; //$NON-NLS-1$
//            if (filePath != null) {
//                path = filePath.toOSString();
//                if (program.execute(path)) {
//					return;
//				}
//            }
//            throw new CoreException(
//                    new Status(
//                            IStatus.ERROR,
//                            WorkbenchPlugin.PI_WORKBENCH,
//                            0,
//                            NLS.bind(WorkbenchMessages.ExternalEditor_errorMessage, path), 
//                            null));
//        }
//    }
//
//    /**
//     * open the editor.
//     * @exception	Throws a CoreException if the external editor could not be opened.
//     */
//    public void openWithUserDefinedProgram() throws CoreException {
//        // We need to determine if the command refers to a program in the plugin
//        // install directory. Otherwise we assume the program is on the path.
//
//        String programFileName = null;
//        IConfigurationElement configurationElement = descriptor
//                .getConfigurationElement();
//
//        // Check if we have a config element (if we don't it is an
//        // external editor created on the resource associations page).
//        if (configurationElement != null) {
//            try {
//                Bundle bundle = Platform.getBundle(configurationElement
//                        .getNamespace());
//                // See if the program file is in the plugin directory
//                URL entry = bundle.getEntry(descriptor.getFileName());
//                if (entry != null) {
//                    // this will bring the file local if the plugin is on a server
//                    URL localName = Platform.asLocalURL(entry);
//                    File file = new File(localName.getFile());
//                    //Check that it exists before we assert it is valid
//                    if (file.exists()) {
//						programFileName = file.getAbsolutePath();
//					}
//                }
//            } catch (IOException e) {
//                // Program file is not in the plugin directory
//            }
//        }
//
//        if (programFileName == null) {
//			// Program file is not in the plugin directory therefore
//            // assume it is on the path
//            programFileName = descriptor.getFileName();
//		}
//
//        // Get the full path of the file to open
//        if (filePath == null) {
//            throw new CoreException(
//                    new Status(
//                            IStatus.ERROR,
//                            WorkbenchPlugin.PI_WORKBENCH,
//                            0,
//                            NLS.bind(WorkbenchMessages.ExternalEditor_errorMessage,programFileName), 
//                            null));
//        }
//        String path = filePath.toOSString();
//
//        // Open the file
//
//        // ShellCommand was removed in response to PR 23888.  If an exception was 
//        // thrown, it was not caught in time, and no feedback was given to user
//
//        try {
//			if (Util.isMac()) {
//				Runtime.getRuntime().exec(
//						new String[] { "open", "-a", programFileName, path }); //$NON-NLS-1$ //$NON-NLS-2$
//			} else {
//				Runtime.getRuntime().exec(
//						new String[] { programFileName, path });
//			}
//        } catch (Exception e) {
//            throw new CoreException(
//                    new Status(
//                            IStatus.ERROR,
//                            WorkbenchPlugin.PI_WORKBENCH,
//                            0,
//                            NLS.bind(WorkbenchMessages.ExternalEditor_errorMessage,programFileName),
//                            e));
//        }
//    }
//}
